001 /* 002 * Copyright 2003-2005 The Apache Software Foundation 003 * Copyright 2005 Stephen McConnell 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package net.dpml.cli.commandline; 018 019 import java.util.Collections; 020 import java.util.Iterator; 021 import java.util.List; 022 023 import net.dpml.cli.CommandLine; 024 import net.dpml.cli.Option; 025 import net.dpml.cli.resource.ResourceConstants; 026 import net.dpml.cli.resource.ResourceHelper; 027 028 /** 029 * Instances of CommandLine represent a command line that has been processed 030 * according to the definition supplied to the parser. 031 * 032 * @author <a href="http://www.dpml.net">Digital Product Meta Library</a> 033 * @version 1.0.0 034 */ 035 public abstract class CommandLineImpl implements CommandLine 036 { 037 /** 038 * Detects the presence of an option with the specified trigger in this 039 * CommandLine. 040 * 041 * @param trigger the trigger to search for 042 * @return true iff an option with this trigger is present 043 */ 044 public final boolean hasOption( final String trigger ) 045 { 046 return hasOption( getOption( trigger ) ); 047 } 048 049 /** 050 * Retrieves the Argument values associated with the specified Option 051 * 052 * @param trigger a trigger used to lookup the Option 053 * @return a list of values or an empty List if none are found 054 */ 055 public final List getValues( final String trigger ) 056 { 057 return getValues( getOption( trigger ), Collections.EMPTY_LIST ); 058 } 059 060 /** 061 * Retrieves the Argument values associated with the specified Option 062 * 063 * @param trigger a trigger used to lookup the Option 064 * @param defaultValues the result to return if no values are found 065 * @return a list of values or defaultValues if none are found 066 */ 067 public final List getValues( 068 final String trigger, final List defaultValues ) 069 { 070 return getValues( getOption( trigger ), defaultValues ); 071 } 072 073 /** 074 * Retrieves the Argument values associated with the specified Option 075 * 076 * @param option the Option associated with the values 077 * @return a list of values or an empty List if none are found 078 */ 079 public final List getValues( final Option option ) 080 { 081 return getValues( option, Collections.EMPTY_LIST ); 082 } 083 084 /** 085 * Retrieves the single Argument value associated with the specified Option 086 * 087 * @param trigger a trigger used to lookup the Option 088 * @return the matching value or null if none exists 089 * @throws IllegalStateException if more than one values are found 090 */ 091 public final Object getValue( final String trigger ) throws IllegalStateException 092 { 093 return getValue( getOption( trigger ), null ); 094 } 095 096 /** 097 * Retrieves the single Argument value associated with the specified Option 098 * 099 * @param trigger a trigger used to lookup the Option 100 * @param defaultValue the result to use if no values are found 101 * @return the matching value or defaultValue if none exists 102 * @throws IllegalStateException if more than one values are found 103 */ 104 public final Object getValue( 105 final String trigger, final Object defaultValue ) throws IllegalStateException 106 { 107 return getValue( getOption( trigger ), defaultValue ); 108 } 109 110 /** 111 * Retrieves the single Argument value associated with the specified Option 112 * 113 * @param option the Option associated with the value 114 * @return the matching value or null if none exists 115 * @throws IllegalStateException if more than one values are found 116 */ 117 public final Object getValue( final Option option ) throws IllegalStateException 118 { 119 return getValue( option, null ); 120 } 121 122 /** 123 * Retrieves the single Argument value associated with the specified Option 124 * 125 * @param option the Option associated with the value 126 * @param defaultValue the result to use if no values are found 127 * @return the matching value or defaultValue if none exists 128 * @throws IllegalStateException if more than one value is found 129 */ 130 public final Object getValue( final Option option, final Object defaultValue ) 131 throws IllegalStateException 132 { 133 final List values; 134 if( defaultValue == null ) 135 { 136 values = getValues( option ); 137 } 138 else 139 { 140 values = getValues( option, Collections.singletonList( defaultValue ) ); 141 } 142 if( values.size() > 1 ) 143 { 144 throw new IllegalStateException( 145 ResourceHelper.getResourceHelper().getMessage( 146 ResourceConstants.ARGUMENT_TOO_MANY_VALUES ) ); 147 } 148 if( values.isEmpty() ) 149 { 150 return defaultValue; 151 } 152 return values.get( 0 ); 153 } 154 155 /** 156 * Retrieves the Boolean value associated with the specified Switch 157 * 158 * @param trigger a trigger used to lookup the Option 159 * @return the Boolean associated with trigger or null if none exists 160 */ 161 public final Boolean getSwitch( final String trigger ) 162 { 163 return getSwitch( getOption( trigger ), null ); 164 } 165 166 /** 167 * Retrieves the Boolean value associated with the specified Switch 168 * 169 * @param trigger a trigger used to lookup the Option 170 * @param defaultValue the Boolean to use if none match 171 * @return the Boolean associated with trigger or defaultValue if none exists 172 */ 173 public final Boolean getSwitch( 174 final String trigger, final Boolean defaultValue ) 175 { 176 return getSwitch( getOption( trigger ), defaultValue ); 177 } 178 179 /** 180 * Retrieves the Boolean value associated with the specified Switch 181 * 182 * @param option the Option associated with the value 183 * @return the Boolean associated with option or null if none exists 184 */ 185 public final Boolean getSwitch( final Option option ) 186 { 187 return getSwitch( option, null ); 188 } 189 190 /** 191 * Retrieves the value associated with the specified property 192 * 193 * @param property the property name to lookup 194 * @return the value of the property or null 195 */ 196 public final String getProperty( final String property ) 197 { 198 return getProperty( property, null ); 199 } 200 201 /** 202 * Retrieves the number of times the specified Option appeared in this 203 * CommandLine 204 * 205 * @param trigger a trigger used to lookup the Option 206 * @return the number of occurrences of the option 207 */ 208 public final int getOptionCount( final String trigger ) 209 { 210 return getOptionCount( getOption( trigger ) ); 211 } 212 213 /** 214 * Retrieves the number of times the specified Option appeared in this 215 * CommandLine 216 * 217 * @param option the Option associated to check 218 * @return the number of occurrences of the option 219 */ 220 public final int getOptionCount( final Option option ) 221 { 222 if( option == null ) 223 { 224 return 0; 225 } 226 int count = 0; 227 for( Iterator i = getOptions().iterator(); i.hasNext();) 228 { 229 if( option.equals( i.next() ) ) 230 { 231 ++count; 232 } 233 } 234 return count; 235 } 236 }